#pragma once


struct ICVar
{
	virtual const char* GetString() const = 0;
	virtual float GetFloat() const = 0;
	virtual int GetInt() const = 0;

	virtual void Set(const char* val) = 0;
	virtual void Set(float val) = 0;
	virtual void Set(int val) = 0;
};

struct IConsole
{
	virtual ~IConsole() {}

	//	visibility
	virtual void Show() = 0;
	virtual void Hide() = 0;
	virtual void Toggle() = 0;
	virtual bool IsVisible() const = 0;
	virtual void Render() = 0;

	//	text and execution
	virtual void AddLine(const char* text) = 0;
	virtual void ExecuteString(const char* text) = 0;

	////	variables
	virtual void RegisterVariable(const char* name, string& variable, const char* default_value) = 0;
	virtual void RegisterVariable(const char* name, float& variable, float default_value) = 0;
	virtual void RegisterVariable(const char* name, int& variable, int default_value) = 0;
	virtual void UnregisterVariable(const char* name) = 0;

	virtual ICVar* GetVariable(const char* name) = 0;

	////	commands
	//virtual void RegisterCommand(const char* name) = 0;
	//virtual void UnregisterCommand(const char* name) = 0;
};